package com.gmadmin.service;

import com.gmadmin.entity.SysMenu;
import com.gmadmin.payload.MenuQueryCriteria;
import com.gmadmin.entity.vo.menu.NavMenuVo;
import com.gmadmin.entity.vo.menu.SysMenuVo;

import java.util.List;
import java.util.Set;

/**
 * @author zhangliang
 * @version 1.0
 * @date 2021/2/2 15:01
 */

public interface SysMenuService extends BaseService<SysMenu, MenuQueryCriteria> {
    /**
     * 根据权限列表ids查询菜单路由
     *
     * @param ids id
     * @return  菜单
     */
    List<SysMenuVo> findByRoleIdList(Set<Long> ids);

    /**
     * 根据用户id查询菜单
     *
     * @param currentUserId  当前id
     * @return  返回当前用户菜单
     */
    List<SysMenuVo> findListByUserId(Long currentUserId);

    /**
     * 构建菜单树
     * @param menuVoList  菜单集合
     * @return  菜单树
     */
    List<SysMenuVo> buildTree(List<SysMenuVo> menuVoList);

    /**
     * 返回当前节点的子节点
     * @param sysMenuVo  当前菜单
     * @param menuVoList  所有菜单集合
     * @return  返回子菜单数据
     */
    List<SysMenuVo> collectTreeData(SysMenuVo sysMenuVo,List<SysMenuVo> menuVoList);

    /**
     * 把菜单树构建显示菜单数据结构
     * @param menuVosTree  菜单树
     * @return  返回显示菜单
     */
    List<NavMenuVo> buildMenus(List<SysMenuVo> menuVosTree);

    /**
     * 根据角色查询菜单
     * @param roleId  角色id
     * @return
     */
    List<SysMenu> findListByRoleId(Long roleId);

    /**
     * 获取菜单树
     * @return  菜单树
     */
    List<SysMenuVo> findTree();


    /**
     * 根据pid查询当前菜单子节点
     * @param pid pid
     * @return list
     */
    List<SysMenuVo> findListByPid(Long pid);

    /*
      懒加载查询系统管理菜单数据
      @return
     */
//    List<SysMenuVo> queryMenu();

    /*
      查询当前菜单下的子目录
      @param pid
     * @return
     */
//    List<SysMenuVo> querySupMenu(Long pid);

    /*
      查询菜单排序值
      @param sort max最大值，min最小值
     * @return
     */
//    Long queryMenuSort(String sort);

    /*
      删除菜单相关
      @param idList
     * @return
     */

//     boolean removeByIds(Collection<? extends Serializable> idList) ;

    /*
      导出excel
      @param response
     * @param ids
     */
//    void download(HttpServletResponse response, List<Long> ids) throws IOException;

    /*
      新增菜单
      @param sysMenu
     */
//    void addMenu(SysMenu sysMenu);
}
